<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        li {
            list-style: none;
        }

        .banner {
            width: 500px;
            height: 300px;
            background-color: #ccc;
            margin: 50px auto;
            position: relative;
            overflow: hidden;
        }

        .banner ul {
            width: 2000px;
            display: flex;
            position: absolute;
        }

        .banner ul li {
            width: 500px;
            height: 300px;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 50px;
        }

        .banner span {
            position: absolute;
            top: 0;
            bottom: 0;
            margin: auto;
            width: 30px;
            height: 30px;
            background-color: rgba(0, 0, 0, .5);
            color: #fff;
            text-align: center;
            line-height: 30px;
        }

        #next {
            right: 0;
        }

        ol {
            position: absolute;
            width: 100%;
            display: flex;
            justify-content: center;
            bottom: 0;
        }

        ol li {
            width: 20px;
            height: 20px;
            margin: 10px;
            background-color: #666;
        }

        .active {
            background-color: #f00;
        }
    </style>
</head>

<body>

    <div class="banner">

        <ul id="list">

        </ul>
        <ol>

        </ol>
        <span id="prev">&lt;</span>
        <span id="next">&gt;</span>
    </div>


    <script>

        // 轮播：
        //    css ul宽度设置大一些   保证可以存入所有的图片
        //    bug   span上下翻页 要在上面  z-index

        // 思路：移动ul的位置

        // 计数器   控制播放第几张  


        // 全局变量
        var index = 0;   // 控制播放第几张图片
        var t;   // 定时器


        var oUl = document.getElementById('list');
        var oOl = document.querySelector('ol');
        var oPrev = document.getElementById('prev');
        var oNext = document.getElementById('next');
        var oBanner = document.querySelector('.banner');

        // 获取图片的宽度
        var _width = getCss(oBanner, 'width');



        var arr = [1, 2, 3, 4, 5];   // 写5张图片的地址
        // 动态生成li
        var imgHTML = '';
        var dotHTML = '';
        arr.forEach(function (v, i) {
            // ul里面的图片
            imgHTML += `
                <li>
                    ${v}
                </li>
            ` ;
            // 小点
            dotHTML += `
                <li></li>
            `
        })
        oOl.innerHTML = dotHTML;
        oUl.innerHTML = imgHTML;
        // ul的宽度由 图片的张数来确定的
        oUl.style.width = _width * arr.length + 'px';


        // 在这里生成了li之后才会有图片和小点
        var oLis = document.querySelectorAll('ol li');

        // 默认给第一个小点加红色
        oLis[0].classList.add('active');



        autoPlay();



        // 自动播放  
        function autoPlay() {
            t = setInterval(function () {
                index++;
                if (index === oLis.length) {
                    index = 0;
                }
                show();
            }, 1000)
        }


        function show() {
            // 显示对应的一张图片
            oUl.style.left = - index * _width + 'px';
            // 显示对应的小点
            // 先清除所有的
            for (var i = 0; i < oLis.length; i++) {
                oLis[i].classList.remove('active');
            }
            // 显示当前
            oLis[index].classList.add('active');
        }



        // ele 元素    attr 属性
        function getCss(ele, attr) {
            if (window.getComputedStyle) {
                // 取数字部分    opacity  0.5
                return parseFloat(getComputedStyle(ele)[attr]);
            }
            return parseFloat(ele.currentStyle(attr));
        }


    </script>

</body>

</html>